package ru.pb.game.network.engine.client.packets.receivable;

import ru.pb.game.network.engine.client.packets.FromClientToGameServerPacket;
import ru.pb.game.network.engine.client.packets.sendable.PROTOCOL_INVENTORY_LEAVE_ACK;
import ru.pb.game.objects.model.inventory.PlayerInventory;
import ru.pb.game.objects.model.inventory.emuns.EQMIPEMENT_SLOT;
import ru.pb.game.objects.model.items.Item;
import ru.pb.game.objects.model.players.Player;
import ru.pb.game.objects.model.players.enums.SLOT_STATE;

/**
 * Выход из инвентаря.
 * 
 * @author Felixx
 */
public class PROTOCOL_INVENTORY_LEAVE_REQ extends FromClientToGameServerPacket
{
	private int _frost, _type;
	private int[] _ids = new int[5];
	private boolean _need = false;

	@Override
	public void readImpl()
	{
		_frost = readH();
		_type = readD(); // Тип одеваемых предметов
		//если 1 - скины, маски, береты - 20 байт
		//если 2 - оружие - 20 байт
		//если 3 - оружие + скины, маски, береты - 40 байт
		_need = _buf.hasRemaining();
		if(_type > 0)
		{
			_ids[0] = readD(); // Какая должна быть одета прим пуха
			_ids[1] = readD(); // Какая должна быть одета саб пуха
			_ids[2] = readD(); // Какая должна быть одета мили пуха
			_ids[3] = readD();// Какая должна быть одета тров пуха
			_ids[4] = readD();// Какая должна быть одета итем пуха
		}
		else if(_type == 3)
		{
			_ids[5] = readD();
			_ids[6] = readD();
			_ids[7] = readD();
			_ids[8] = readD();
			_ids[9] = readD();
		}
	}

	@Override
	public void runImpl()
	{
		Player p = getPlayer();
		if(p != null)
		{
			if(_type > 0)
			{
				PlayerInventory<Player> inventory = p.getInventory();
				for(int i = 0; i < _ids.length; i++)
				{
					Item newit = inventory.getItemByItemId(_ids[i]);
					Item oldit = inventory.getItemBySlot(EQMIPEMENT_SLOT.valueOf(i));

					if(oldit != null)
						inventory.unEquipItem(oldit);

					if(newit != null)
						inventory.equipItem(newit);
				}
			}
			if(p.getRoom() != null)
				p.getRoom().changeSlotState(p.getSlot(), SLOT_STATE.SLOT_STATE_NORMAL);
			p.sendPacket(new PROTOCOL_INVENTORY_LEAVE_ACK(_type, _ids));
		}
	}
}